package com.intretech.umsin.code.generator.provider;


import com.intretech.umsin.code.generator.component.DataBaseType;
import com.intretech.umsin.code.generator.entity.ColumnSchema;
import com.intretech.umsin.code.generator.entity.PrimaryKeySchema;
import com.intretech.umsin.code.generator.entity.TableSchema;

import java.util.List;
import java.util.Map;

/**
 * @version V1.0
 * @InterfaceName: IDbSchemaProvider
 * @Description:(IDbSchemaProvider 对应提供的服务接口)
 * @author: 李启联
 * @date: 2020-01-22 09:38
 * @Copyright: Copyright (c) 2020
 */
public interface IDbSchemaProvider {

    public DataBaseType dataBaseType();

    /**
     * 得到当前数据库名称
     * @return
     */
    public String getDatabaseName();

    /**
     * 得到当前数据库中的数据表或视图
     * 默认不传参数则返回数据库中所有表及视图,传参则返回对应的表及视图
     * @return
     */
    public List<TableSchema> getTables(String... tables);

    /**
     * 得到数据库表的定义信息
     * @param tableName
     * @return
     */
    public TableSchema getTableSchema(String tableName);

    /**
     * 得到指定数据表的列定义信息
     * @param tableName 数据库表名称
     * @return
     */
    public List<ColumnSchema> getTableColumns(String tableName);

    /**
     * 得到指定数据表定义的主键
     * @param tableName 数据库表名称
     * @return
     */
    public List<PrimaryKeySchema> getTablePrimaryKey(String tableName);

    /**
     * 得到由后台数据库生成实体对象 主键对应的属性名称
     * @param tableName 数据库表名称
     * @return 属性名称
     */
    public String getEntityPrimaryKeyProperties(String tableName);

    /**
     * 提供给模板准备的数据
     * @param tableName 数据库表名称
     * @return
     */
    public Map<String,Object> prepareDataModel(String tableName);

    /**
     * 得到数据库中的数据类型对应在java中的数据类型
     * @param type 数据库中的数据类型
     * @return
     */
    public String getDataType(String type);
}

